home *** CD-ROM | disk | FTP | other *** search
- /*****************************************************
- * CleanUpFolders
- *
- * A little app to clean up all folders' windows
- * starting with the one that this app is in an
- * continuing recursively downwards.
- *
- * Mike Scanlin 17 Oct 1992
- ****************************************************/
-
- #define kFolderBit (1 << 4)
- #define kZoomBit 0x0020
- #define kOpenTriangleBit 0x0010
- #define kViewMask 0xFF00
- #define kViewByName 0x0200
-
- void main(void);
- void CleanUpAFolder(long theDrDirID);
- void EnumerateCatalog(long dirID);
-
- CInfoPBRec theCPB;
- Str255 theName;
- Rect theRect;
- short hOffset, vOffset;
-
-
- /*****************************************************
- * main
- *
- * Clean up the directory that this app is residing
- * in and then all of the directories contained within
- * this directory recursively. Put this app in the
- * root directory of a volume and launch it to clean
- * up the entire volume.
- ****************************************************/
- void main()
- {
- long dirID;
- short vRefNum;
-
- /* Set the initial directory's size and position */
- SetRect(&theRect, 2, 40, 2+228, 40+165);
-
- /* Set the offset for each child directory */
- hOffset = 16;
- vOffset = 16;
-
- /* Find out where this app is located */
- HGetVol(&theName, &vRefNum, &dirID);
-
- theCPB.dirInfo.ioVRefNum = vRefNum;
- theCPB.dirInfo.ioNamePtr = theName;
-
- /* First, clean up the current directory */
- theCPB.hFileInfo.ioFDirIndex = -1;
- theCPB.dirInfo.ioDrDirID = dirID;
- PBGetCatInfo(&theCPB, FALSE);
- CleanUpAFolder(theCPB.dirInfo.ioDrParID);
-
- /* Now clean up all child directories */
- EnumerateCatalog(dirID);
- }
-
-
- /*****************************************************
- * CleanUpAFolder
- *
- * Given a directory ID, this will unzoom the
- * window, size and position the window, close the
- * "triangle" and set the view to View by Name.
- ****************************************************/
- void CleanUpAFolder(long theDrDirID)
- {
- theCPB.dirInfo.ioDrDirID = theDrDirID;
- theCPB.dirInfo.ioDrUsrWds.frRect = theRect;
- /* clear the zoomed bit, the "open triangle bit"
- * and the view; leave the other bits alone
- * because we don't know what they're for.
- */
- theCPB.dirInfo.ioDrUsrWds.frView &=
- ~kViewMask - kZoomBit - kOpenTriangleBit;
- /* set the view to View by Name */
- theCPB.dirInfo.ioDrUsrWds.frView |= kViewByName;
- PBSetCatInfo(&theCPB, FALSE);
- }
-
-
- /*****************************************************
- * EnumerateCatalog
- *
- * Given a directory ID to start with, this calls
- * CleanUpAFolder once for every directory within
- * the given start directory. On entry it offsets
- * theRect down and to the right; on exit it offsets
- * it up and to the left.
- ****************************************************/
- void EnumerateCatalog(long dirID)
- {
- long tempDir;
- short index;
- OSErr myErr;
-
- OffsetRect(&theRect, hOffset, vOffset);
-
- index = 1;
- do {
- theCPB.hFileInfo.ioFDirIndex = index;
- theCPB.dirInfo.ioDrDirID = dirID;
- myErr = PBGetCatInfo(&theCPB, FALSE);
- if (myErr == noErr) {
- if (theCPB.hFileInfo.ioFlAttrib & kFolderBit) {
- tempDir = theCPB.dirInfo.ioDrDirID;
- CleanUpAFolder(dirID);
- EnumerateCatalog(tempDir);
- myErr = noErr;
- }
- }
- index++;
- } while (myErr == noErr);
-
- OffsetRect(&theRect, -hOffset, -vOffset);
- }
-